package com.stars.util.date;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StringUtils;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author : Rocks
 * @version : 1.0
 * @date : 2022/12/20 14:59
 * @description : 日期格式化工具类
 */
public class DateFormatUtils {

    private static final Logger logger = LoggerFactory.getLogger(DateFormatUtils.class);

    public static final String DATE_PATTERN = "yyyy-MM-dd HH:mm:ss";
    public static final String DATE_PATTERN_MS = "yyyy-MM-dd HH:mm:ss:SSS";
    public static final String DATE_PATTERN_NUM = "yyyyMMddHHmmss";
    public static final String DATE_PATTERN_NO_SECOND = "yyyy-MM-dd HH:mm";
    public static final String DATE_PATTERN_NO_SECOND_CN = "yyyy年M月d日 HH:mm";
    public static final String DATE_FORMAT_NAME = "FORMAT_";
    public static final String DATE_PATTERN_DATE = "yyyy-MM-dd";
    public static final String DATE_PATTERN_DATE_CN = "yyyy年M月d日";
    public static final String DATE_PATTERN_NO_CHART = "yyyyMMdd";
    public static final String DATE_PATTERN_NO_CHART_HOUR = "yyyyMMddHH";
    public static final String DATE_PATTERN_MINUTE = "HH:mm:ss";
    public static final String DATE_PATTERN_SECUND = "HH:mm";
    public static final String DATE_PATTERN_YEAR = "yyyy";
    public static final String DATE_PATTERN_MONTH = "yyyy-MM";

    /**
     * 年-月-日 时:分:秒 字符串转日期对象
     * @author : Rocks
     * @date :  2023/2/25 23:32
     * @param str 要转换的字符串
     * @return Date 转换后的日期对象
     */
    public static Date parse(String str){
        return parse(str, DATE_PATTERN);
    }

    /**
     * 年-月-日 字符串转日期对象
     * @author : Rocks
     * @date :  2023/2/25 23:34
     * @param str 要转换的字符串
     * @return Date 转换后的日期对象
     */
    public static Date parseDate(String str){
        return parse(str, DATE_PATTERN_DATE);
    }

    /**
     * 字符串转日期对象
     * @author : Rocks
     * @date :  2023/2/25 23:34
     * @param str 要转换的字符串
     * @param pattern 转换字符串规则
     * @return Date 转换后的日期对象
     */
    public static Date parse(String str,String pattern){
        Date date;
        if(!StringUtils.hasLength(str)){
            return null;
        }
        try{
            SimpleDateFormat sdf = new SimpleDateFormat(pattern);
            date = sdf.parse(str);
        }catch(Exception e){
            logger.error("日期格式化日常",e);
            return null;
        }

        return  date;
    }

    /**
     * 日期对象转字符串 年-月-日 时:分:秒
     * @author : Rocks
     * @date :  2023/2/25 23:35
     * @param date 日期对象
     * @return String 年-月-日 时:分:秒
     */
    public static String format(Date date){
        return format(date, DATE_PATTERN);
    }

    /**
     * 日期对象转字符串 年-月-日
     * @author : Rocks
     * @date :  2023/2/25 23:36
     * @param date 要转换的日期对象
     * @return String 年-月-日
     */
    public static String formatDate(Date date){
        return format(date, DATE_PATTERN_DATE);
    }

    /**
     * 日期对象转字符串
     * @author : Rocks
     * @date :  2023/2/25 23:37
     * @param date 日期对象
     * @param pattern 要转换的规则
     * @return String 转换后的字符串
     */
    public static String format(Date date,String pattern){
        if(date == null || !StringUtils.hasLength(pattern)){
            logger.error("日期或者格式化字段为空");
            return "";
        }
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        return sdf.format(date);
    }
}
